home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
EnigmA Amiga Run 1995 October
/
EnigmA AMIGA RUN 01 (1995)(G.R. Edizioni)(IT)[!][issue 1995-10][Aminet 7].iso
/
Aminet
/
dev
/
asm
/
Asm_Course2.lha
/
Teil09.TXT
< prev
next >
Wrap
Text File
|
1993-09-01
|
12KB
|
318 lines
A S S E M B L E R - K U R S (c) Jeff Kandle 1990
9.Teil...
So, arbeiten wir noch ein bisschen mit dem listing von Eben.
Fuegt doch mal vor dem Ende der Copperliste folgende zeilen ein..
dc.w $0182,$0000
dc.w $000f,-2
dc.w $0182,$0222
dc.w $100f,-2
dc.w $0182,$0444
dc.w $200f,-2
dc.w $0182,$0666
dc.w $200f,-2
dc.w $0182,$0888
dc.w $200f,-2
dc.w $0182,$0aaa
dc.w $500f,-2
dc.w $0182,$0ccc
dc.w $600f,-2
dc.w $0182,$0eee
dc.w $700f,-2
dc.w $0182,$0ccc
dc.w $800f,-2
dc.w $0182,$0aaa
dc.w $900f,-2
dc.w $0182,$0888
dc.w $a00f,-2
dc.w $0182,$0666
dc.w $b00f,-2
dc.w $0182,$0444
dc.w $c00f,-2
dc.w $0182,$0222
dc.w $d00f,-2
dc.w $0182,$0000
Nett, nicht wahr...schoener Effekt.
Natuerlich koennte man auf diese art und weise auf ein logo Titschen oder
schwingen lassen. Dazu muessten wir wie am anfang mit dem balken der
Springt, die Positionen nicht mehr durch ein Popeliges `Add` erschaffen,
sondern die positionen aus einer Tabelle lesen. Aber das machen wir
zusammen mit dem dem Naechsten Effekte, der ein wahrer Super effekt ist,
wenn man sich muehe gibt...Aber ich denke es wird mal zeit etwas zu machen
was schon mal etwas Profisioneller aussieht.
Dazu muessen wir allerdings Einen Schritt weiter gehen, naemlich in...
12.Animation durch zyklische Copperlistenneuerstellung
Hoert sich etwas Komisch an, ist aber schnell erklaert.
Die veraenderungen die wird bis jetzt an den Copperlisten durchgefuehrt
haben bezogen sich immer nur auf ein oder zwei Elemente.
Jetzt aber werden die veraenderungen so Zahlreich das es einfacher und
schneller ist wenn wir jedesmal eine neue copperliste berechnen lassen, und
sie ueber die alte Kopieren.
Anwendung wuerde es finden, wenn wir wie im Vorletzten Listing eine
Copperliste erstellen, die eine Farbspielerei durch veraendern einer
Tabelle immer wieder neue Bilder Bringt, evtl. koennte auch bei jedem
Durchlauf eine Neue Tabelle initialisiert werden.
Tja das ist alles moeglich. Wir nehmen also die Technik die wir schon
kennen. Das erste element lesen und die Tabelle rotieren lassen.
Ich ueberlege mir gerade was wir den zusammenschustern...Entweder Stripes
(tubes) oder einen Waessrigen Wassereffekt, der waere natuerlich schoener.
Also, machen wir einen Kombinierten Logo-Titsch und Wasser effekt.
Das mit dem Titschen is ja wohl Null Probleme wie Alf jetzt sagen wuerde.
Denn das erstzen der Add funktion durch das auslesen einer Tabelle ist ja
schon etwas laenger bekannt. Jetzt muss ich nur noch die technik des
Wassereffektes erklaeren...Naja dazu gehen wir zwar nicht an den Fuehlinger
See, sonder in den Ascii see. Stellt euch bitte vor am ufer steht eine 4,
auf deren schulter eine drei, darauf eine 2 und ganz oben ist eine 1.
Desweiteren Stellt euch vor ihr kommt aus dem Wasser, es sind wellen da,
und ihr seht nach vorne. Dann seht ihr etwas verzerrt die Vier auch im
wasser wieder, allerdings auf dem Kopf...Ich versuche das mal
aufzuzeichnen. Bitte entschuldigt, den meine AscII zeichen faehigkeiten
sind doch sehr begrenzt.
Ich beschreibe die Situation von der seite, wobei die Zahlen auf den Wasser
die Stellen sind wo ihr die Spiegeln bilder der Zahlen am Ufer seht.
Du 1
2
3
4
111 ________________
*** ***2 4*** *** *** /
* * * *333* * * * * */ Strand
*** *** *** *** /
Wenn ihr euch vorstellt von Punkt `Du` zu gucken seht ihr die 1 ein paar
mal, also verzerrt laenger, die 2 garnicht, von der drei, zwei abschnitte,
allerdings wieder ins groessere verzerrt, und die 4 ganz. Das ganze
verzieht sich natuerlich sobald sich das wasser bewegung. Da wasser die
bewandnis hat niemals in wellen zu stehen, ist es klar das es sich standig
aendert.
So auch wenn es schwerfaellt, erinnert euch mal an das was ich geschrieben
habe zu den Einfachen effekten mit den Modulo werte, vonwegen Zeile
doppelt, oder Zeile garnicht oder so.
Mit dieser Technik koennten wir das machen, also frisch ans Werk.
Das wir jetzt fuer laenger zeit erstmal das letzte komplette listing. Da
wir ein laengere zeit nur noch mit Austauschen der Erstellungsroutinen
auskommen.
Achja fuer die Leute die sich die Register markieren.
Die Modulo register fuer Grade und ungrade Planes sind
$DFF108 ungrade ($0108 in dem Copperlistenerstellungsprogramm)
$DFF10A grade ($010a in dem Copperlistenerstellungsprogramm)
Falls ihr mir den Worten grade und ungrade noch nicht anfangen koennt, oder
warum es zwei getrennte gibt ist einfach.
Es ist zwar laestige bei einem bild ueber einer Plane (also ueber 2 Farben)
immer alle beide Modulo Werte zu setzen. Allerdings gibt es den
DualPlayfield-Modus, in dem Zwei voellig voneinander unabhaegige Playfields
gezeigt werden. Diese Koennen allerdings nicht mehr als 8 farben (3 planes)
darstellen, da der Amiga insgesamt nur 6 Planes verwaltet. Die beiden
Playfields teilen sich dann die graden und ungraden auf...
Playfield 1 - Playfield 2
1 2
3 4
5 6
Und dann ist es natuerlich schon besser wenn man getrennte Modulo werte
hat. Denn das eine Koennte ja ein Titschendes Logo sein, und das andere
ein Playfield mit uebergroesse, oder ?
Hier erstmal das Programm, ein paar erklaerungen hinterher.
start:
execbase= 4
openlibrary= -408
vhposr= $dff006
intena= $dff09a
dmacon= $dff096
cop1lc= $dff080
ciaapra= $bfe001
move.w #$0020,dmacon
move.w #$4000,intena
move.w #7,d0
lea $40000,a0
lea $dff180,a1
coloop:
move.w (a0)+,(a1)+
dbf d0,coloop
wait: cmpi.b #$80,vhposr
bne.s wait
bsr.s makecl
bsr.L tablescroll
btst #6,ciaapra
bne wait
move.l execbase,a6
lea gfxname(pc),a1
jsr openlibrary(a6)
move.l d0,a6
move.w #$83e0,dmacon
move.w #$c000,intena
move.l 38(a6),cop1lc
rts
makecl:
lea $03f000,a0
move.l a0,cop1lc
move.l #$01003200,(a0)+
move.l #$00e00004,(a0)+
move.l #$00e20010,(a0)+
move.l #$00e40004,(a0)+
move.l #$00e62810,(a0)+
move.l #$00e80004,(a0)+
move.l #$00ea5010,(a0)+
move.l #$01003200,(a0)+
move.l #$008e3081,(a0)+ ;diwstrt
move.l #$009030c1,(a0)+ ;diwstop
move.l #$00920038,(a0)+ ;ddfstrt
move.l #$009400d0,(a0)+ ;ddfstop
;----------------------------------------------------------------
; Wasser Effekt
;----------------------------------------------------------------
bsr.s makewasser
move.l #$b10ffffe,(a0)+
move.l #$01000200,(a0)+
move.l #$01081780,(a0)+
move.l #$010a1780,(a0)+
move.l #$01020000,(a0)+
move.l #$b20ffffe,(a0)+
move.l #$01080000,(a0)+
move.l #$010a0000,(a0)+
move.l #$-2,(a0)+
rts
gfxname: dc.b "graphics.library",0
>Extern "wasserpic.raw",$40000
even
Makewasser:
move.w #$0108,d0 ;Modulo fuer ungerade planes
move.w #$6c0f,d2 ;Waitadressen
move.w #$fffe,d3 ;Waitbefehl
move.w #$0043,d4 ;Counter
move.l #wassertable,a1 ;Wasserdatentabelle
wasserloop:
move.w d2,(a0)+ ;Warte auf ..
move.w d3,(a0)+ ;Wartebefehl
move.w d0,(a0)+
add.w #2,d0
move.w (a1),(a0)+ ;Modulo wert aus tabelle
move.w d0,(a0)+ ;Modulo gerade
sub.w #2,d0
move.w (a1)+,(a0)+ ;Modulo wert aus tabelle
add.w #$100,d2
dbf d4,wasserloop
rts
Tablescroll:
move.w #$63,d0
move.l #wassertable,a0
move.l a0,a1
add.l #2,a1
move.w (a0),a2
scrollloop:
move.w (a1)+,(a0)+
dbf d0,scrollloop
move.w a2,(a0)
rts
wassertable:
dc.w -80,-80,-120,-80,-120,-120,-120,-120,-80,-120,-80,-80
dc.w -80,-80,-40,-80,-40,-40,-40,-40,-80,-40,-80,-80
dc.w -80,-80,-120,-80,-120,-120,-120,-120,-80,-120,-80,-80
dc.w -80,-80,-40,-80,-40,-40,-40,-40,-80,-40,-80,-80
dc.w -80,-80,-120,-80,-120,-120,-120,-120,-80,-120,-80,-80
dc.w -80,-80,-40,-80,-40,-40,-40,-40,-80,-40,-80,-80
dc.w -80,-80,-120,-80,-120,-120,-120,-120,-80,-120,-80,-80
dc.w -80,-80,-40,-80,-40,-40,-40,-40,-80,-40,-80,-80
dc.w -80,-80,-120,-80,-120,-120,-120,-120,-80,-120,-80,-80
dc.w -80,-80,-40,-80,-40,-40,-40,-40,-80,-40,-80,-80
dc.w -80,-80,-120,-80,-120,-120,-120,-120,-80,-120,-80,-80
dc.w -80,-80,-40,-80,-40,-40,-40,-40,-80,-40,-80,-80
Den namen muesst ihr selber einsetzen. Ich habe den Extern befehl frueher
immer irgendwo im Listing positioniert, also viel spass beim suchen !
So fleissig wie ihr denkt bin ich allerdings nicht, ich habe das nicht
eben jetzt gemacht, sondern....
Tratarata, das ist mein erster versuch mit dem Wasser-effekt, es ist
ungefaehr 4 monate alt...Und wie ihr seht habe ich meine Programmierstil
seitdem nicht grossartig veraendert. Aber das heisst nichts, so habe ich
auch schon auf dem 64`er gewurschtelt.
Wobei ich hiermit alle Kursteilnehmer gruessen moechte die vom guten alten
64`er umgestiegen sind, um die klasse hoeher zu fahren..
Ich habe nichts grossartiges daran geaendert, deshalb laeuft es mit 8
Farben, waere guenstig wenn ihr noch ein Bild malt, welches nur aus drei
Planes besteht, oder besser versucht doch mal es umzuschreiben so das es
auf 32 farben laeuft. Eins ist allerdings von Noeten, ihr muesst in der
Erstellungs routine die da Heisst `Makewasser`, das erste wait wort so
einstellen so das es auf das ende Eures Logos zeigt. Es waere ganz gut wenn
euer Logo 70 Zeilen nicht ueberschreitet. Ansonsten koennt ihr machen was
ihr wollt.
So jetzt mal kurz zu der Funktion des Prograemmchens...
Es triftt alle noetigen vorbereitungen, ausserhalb der Endlosschleife.
Naja, was heisst `Alle`...sie kopiert nur die Farben nach $dff180 und so
weiter. Copperliste wird noch keine Erstellt.
Das passiert in der Endlosschleife, dort erstellen wir eine Copperliste,
die jeder zeile in einem bestimmten bereich einen Modulo wert gibt.
Diese Modulowerte, entsprechen dem was ich von dem Blick auf das wasser
gesagt habe. Manches sieht man nicht, manches ja...manches sogar doppelt
und dreifach..
Nachdem die Copperliste erstellt ist, wird die Tabelle der Modulo werte
Rotiert. Dann wird wieder einmal die Maus abgefragt...und schliesslich
falls nicht gedrueckt...springt der Pozessor wieder in die Endlos schleife.
Allerdings muss dieser Effekt, wenn er in ein Intro/Demo eingebaut wird
etwas veraendert werden, aber dazu (Viel) spaeter.
Versucht mal eine Andere Tabelle zu erstellen, ihr muesst allerdings dann
auch die Routine achten die die Tabelle Rotieren laesst, ihr muesst sie
dann auf eine neue Laenge einstellen.
Bei diesem Listing ist halt sehr deutlich zu sehen wie das mit dem
Zyklischen veraendern der Copperliste geht. Sobald die Zeile #$80 erreicht
ist, wird die neue Liste errechnet, und gleichzeitg aufgebaut. Nachdem die
steht wir noch die Tabelle rotiert, und dann kommt eine Maus abfrage. Und
dann wieder von Vorne.
Falls ihr, was ich nicht hoffen will, das ganze noch nicht so ganz
verstanden habt, es ging auch etwas schnell, dann ist das nicht ganz so
schlimm, das kommt...da wir jetzt schon zu den Fortgeschrittenen zaehlen,
koennen wir uns kleine schnitzer erlauben. Da ich nicht annehme das ihr
euch alles nur einmal durchlest schaetze ich mal das es irgendwann auch der
letzte kapiert.
Ihr koenntet ja mal versuchen, diesen Wassereffekte so mit der
Horizontalen laufschrift (ich nenne sie Kino Schrift) zu verbinden das es
aussieht als wenn die Schrift aus dem Wasser Kaem, gute idee ne ?
So, nachdem wir das mit diser zyklischen veraenderung verstanden habe
machen wir uns weiter, wieder weg davon und hin zur einfachen veraenderung
von einzelnen Elementen der laufenden Copperliste.
Im naechsten Teil wagen wir uns an ein Schwingendes Logo...
See you....
Jeff Kandle